home *** CD-ROM | disk | FTP | other *** search
/ PC Player 2004 May / pc player 2004-05.iso / Demos / FarCry / Data1.cab / _950E3D9CF34D4B2BAB995A53599F7CB8 < prev    next >
Encoding:
Text File  |  2004-01-06  |  5.2 KB  |  211 lines

  1.  
  2. --Script:LoadScript("scripts/Default/Entities/AI/SoundSupressor.lua");
  3. TV={
  4.     PropertiesInstance = {
  5.         object_Model="Objects/Outdoor/props/PORTABLE_TV/portable_TV.cgf",
  6.         object_ModelDestroyed="",
  7.         nDamage=5,
  8.         fSndRadius = 25,
  9.         fSndVolume = 255,
  10.         AliveSoundLoop={
  11.             sndFilename="",
  12.             InnerRadius=1,
  13.             OuterRadius=10,
  14.             nVolume=255,
  15.         },
  16.         DeadSoundLoop={
  17.             sndFilename="",
  18.             InnerRadius=1,
  19.             OuterRadius=10,
  20.             nVolume=255,
  21.         },
  22.         DyingSound={
  23.             sndFilename="",
  24.             InnerRadius=1,
  25.             OuterRadius=10,
  26.             nVolume=255,
  27.         },
  28.  
  29. --        nPlayerDamage=100,
  30. --        nPlayerDamageRadius=3,
  31.     },
  32.  
  33.     Properties = {
  34.         mass = 5,
  35.     },
  36.  
  37. }
  38.  
  39. function TV:OnInit()
  40.     self:EnableUpdate(0);
  41.     AI:RegisterWithAI(self.id, AIOBJECT_SNDSUPRESSOR, self.Properties);
  42.     self:SetAICustomFloat( self.PropertiesInstance.fSndRadius );
  43.  
  44.  
  45.     self:OnReset();
  46. end
  47.  
  48. function TV:OnPropertyChange()
  49.     self:OnReset();
  50. end
  51.  
  52. function TV:OnShutDown()
  53.  
  54. end
  55.  
  56.  
  57.  
  58. function TV:OnReset()
  59.  
  60.  
  61.     if (self.PropertiesInstance.object_Model ~= self.CurrModel) then
  62.         self.CurrModel = self.PropertiesInstance.object_Model;
  63.         self:LoadObject(self.PropertiesInstance.object_Model,0,1);
  64.         self:DrawObject(0,1);
  65.         self:CreateStaticEntity( 10,100 );
  66.         self:CreateRigidBody( 0,self.Properties.Mass,0 );        
  67.     end
  68.     if ((self.PropertiesInstance.object_ModelDestroyed ~="") and 
  69.     (self.PropertiesInstance.object_ModelDestroyed ~= self.CurrDestroyedModel)) then
  70.         self.CurrDestroyedModel = self.PropertiesInstance.object_ModelDestroyed;
  71.         self:LoadObject(self.PropertiesInstance.object_ModelDestroyed,1,1);
  72.         self:DrawObject(1,0);
  73.         self:CreateStaticEntity( 10,100 );
  74.     end
  75.     
  76.     -- stop old sounds
  77.     if (self.DyingSoundLoop and Sound:IsPlaying(self.DyingSound)) then
  78.         Sound:StopSound(self.DyingSound);
  79.     end
  80.     if (self.DeadSoundLoop and Sound:IsPlaying(self.DeadSoundLoop)) then
  81.         Sound:StopSound(self.DeadSoundLoop);
  82.     end
  83.     if (self.AliveSoundLoop and Sound:IsPlaying(self.AliveSoundLoop)) then
  84.         Sound:StopSound(self.AliveSoundLoop);
  85.     end
  86.     -- load sounds
  87.     local SndTbl;
  88.     SndTbl=self.PropertiesInstance.AliveSoundLoop;
  89.     if (SndTbl.sndFilename~="") then
  90.         self.AliveSoundLoop=Sound:Load3DSound(SndTbl.sndFilename, 0);
  91.         if (self.AliveSoundLoop) then
  92.             Sound:SetSoundPosition(self.AliveSoundLoop, self:GetPos());
  93.             Sound:SetSoundLoop(self.AliveSoundLoop, 1);
  94.             Sound:SetSoundVolume(self.AliveSoundLoop, SndTbl.nVolume);
  95.             Sound:SetMinMaxDistance(self.AliveSoundLoop, SndTbl.InnerRadius, SndTbl.OuterRadius);
  96.         end
  97.     else
  98.         self.AliveSoundLoop=nil;
  99.     end
  100.     SndTbl=self.PropertiesInstance.DeadSoundLoop;
  101.     if (SndTbl.sndFilename~="") then
  102.         self.DeadSoundLoop=Sound:Load3DSound(SndTbl.sndFilename, 0);
  103.         if (self.DeadSoundLoop) then
  104.             Sound:SetSoundPosition(self.DeadSoundLoop, self:GetPos());
  105.             Sound:SetSoundLoop(self.DeadSoundLoop, 1);
  106.             Sound:SetSoundVolume(self.DeadSoundLoop, SndTbl.nVolume);
  107.             Sound:SetMinMaxDistance(self.DeadSoundLoop, SndTbl.InnerRadius, SndTbl.OuterRadius);
  108.         end
  109.     else
  110.         self.DeadSoundLoop=nil;
  111.     end
  112.     SndTbl=self.PropertiesInstance.DyingSound;
  113.     if (SndTbl.sndFilename~="") then
  114.         self.DyingSound=Sound:Load3DSound(SndTbl.sndFilename, 0);
  115.         if (self.DyingSound) then
  116.             Sound:SetSoundPosition(self.DyingSound, self:GetPos());
  117.             Sound:SetSoundVolume(self.DyingSound, SndTbl.nVolume);
  118.             Sound:SetMinMaxDistance(self.DyingSound, SndTbl.InnerRadius, SndTbl.OuterRadius);
  119.         end
  120.     else
  121.         self.DyingSound=nil;
  122.     end
  123.  
  124.     self.curr_damage=self.PropertiesInstance.nDamage;
  125.  
  126.     System:Log("---RESET TV");
  127.     self:GoAlive();
  128. end
  129.  
  130. function TV:GoAlive()
  131.  
  132.     self:EnablePhysics(1);
  133.     self:DrawObject(0,1);
  134.     self:DrawObject(1,0);
  135.     if (self.DeadSoundLoop) then
  136.         Sound:StopSound(self.DeadSoundLoop);
  137.         System:Log("stopping dead-loop");
  138.     end
  139.     self:GotoState( "Active" );
  140. end
  141.  
  142. function TV:GoDead()
  143.     if (self.DyingSound and (not Sound:IsPlaying(self.DyingSound))) then
  144.         Sound:PlaySound(self.DyingSound);
  145.         System:Log("starting dying");
  146.     end
  147.     if (self.DeadSoundLoop and (not Sound:IsPlaying(self.DeadSoundLoop))) then
  148.         Sound:PlaySound(self.DeadSoundLoop);
  149.         System:Log("starting dead-loop");
  150.     end
  151.  
  152.     self:GotoState( "Dead" );
  153. end
  154.  
  155. TV.Active={
  156.     OnBeginState=function(self)
  157.         self:Event_On();
  158.     end,
  159.     OnDamage = function(self,hit)
  160. --        System:Log("ON DAMAGE "..self.id.." AMOUNT="..hit.damage);
  161.  
  162.             
  163.         self.curr_damage=self.curr_damage-hit.damage;
  164.         
  165.         if(self.curr_damage<=0)then
  166.             self:GoDead();
  167.         end
  168.     end,
  169. }
  170.  
  171. TV.Dead={
  172.     OnBeginState=function(self)
  173.         System:Log("enter dead");
  174.     
  175.         self:Event_Off();
  176.                 
  177.         self:DrawObject(0,0);
  178.         if(self.PropertiesInstance.object_ModelDestroyed~="")then
  179.             self:DrawObject(1,1);
  180.         else
  181.             self:EnablePhysics(0);        
  182.         end
  183.     end,
  184. }
  185.  
  186.  
  187. function TV:Event_OnDamage( sender )
  188.     BroadcastEvent( self,"OnDamage" );
  189. end
  190.  
  191.  
  192. function TV:Event_On( sender )
  193.  
  194.     self:TriggerEvent(AIEVENT_ENABLE);
  195.  
  196.     if (self.AliveSoundLoop and (not Sound:IsPlaying(self.AliveSoundLoop))) then
  197.         Sound:PlaySound(self.AliveSoundLoop);
  198.         System:Log("starting alive-loop");
  199.     end
  200.  
  201. end
  202.  
  203. function TV:Event_Off( sender )
  204.  
  205.     self:TriggerEvent(AIEVENT_DISABLE);
  206.  
  207.     if (self.AliveSoundLoop) then
  208.         Sound:StopSound(self.AliveSoundLoop);
  209.         System:Log("stopping alive-loop");
  210.     end
  211. end